package com.charging.business.vo;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * @author JerryLu
 * @date 2024/8/26 15:59
 * @description 入口计费请求参数类
 */
@Data
@Component
public class FeeEnCalcRequest {

    /**
     * 消息流水号
     */
    @JSONField(ordinal = 0)
    public String msgId;

    /**
     * 当前收费门架编码
     */
    @JSONField(ordinal = 1)
    public String curTollGantry;

    /**
     * 当前收费门架经过时间
     */
    @JSONField(ordinal = 2)
    @JsonFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
    public String curPassTime;

    /**
     * 车道类型
     * 0-保留，
     * 1-封闭 E/M 混合入口，
     * 2-封闭 E/M 混合出口，
     * 3-封闭 ETC 入口，
     * 4-封闭 ETC 出口，
     * 5-E/M 混合开放式，
     * 6-ETC 开放式，
     * 7～15 自定义，
     * 16-自助发卡，
     * 17～255 保留给未来使用，十六进制编码
     */
    @JSONField(ordinal = 3)
    public Integer laneType;

    /**
     * 入口站Hex编码
     */
    @JSONField(ordinal = 4)
    public String enTollStationHex;

    /**
     * 发行服务机构编码 ETC发行服务结构编码，非ETC填0；如四川工行："510102",CPC卡填“0”
     */
    @JSONField(ordinal = 5)
    public String issuerId;

    /**
     * 卡网络编号,ETC的网络编号，非ETC填0；如"4401"，CPC卡填"0"
     */
    @JSONField(ordinal = 6)
    public String CPUNetID;

    /**
     * 车辆用户类型
     * CPU卡0015文件或双片式标签EF04文件或单片式标签 EF01文件）
     * 0-普通车；6-公务车；8-军警车；10-紧急车；12-免费；14-车队；24-Jl 类型集装箱 26- 应急车 27-货车列车或半挂汽车列车 28-J2 类型集装箱。
     */
    @JSONField(ordinal = 7)
    public Integer vehicleUserType;

    /**
     * 入口车辆轴数
     */
    @JSONField(ordinal = 8)
    public Integer enAxleCount;

    /**
     * 通行介质类型
     * 1位数字：
     * 1-OBU
     * 2-CPC卡
     * 3-纸券
     * 9-无通行介质
     */
    @JSONField(ordinal = 9)
    public Integer mediaType;

    /**
     * 卡片类型，非双片式或双片式标签无卡时填0
     */
    @JSONField(ordinal = 10)
    public Integer CPUCardType;

    /**
     * 卡片版本号
     * 见CPU卡0015文件第10字节（或OBUEF04文件相应字段）
     * 非双片式时填0。如：0x04
     */
    @JSONField(ordinal = 11)
    public Integer CPUVersion;

    /**
     * OBU/CPC序号编码
     * OBU的系统信息文件（EF01文件）的合同序列号；
     * CPC的系统信息文件（EF01文件）的CPC卡ID。
     */
    @JSONField(ordinal = 12)
    public String OBUSN;

    /**
     * 双片式ETC卡号
     * 卡片0015文件第11至20字节
     */
    @JSONField(ordinal = 13)
    public String CPUCardId;

    /**
     * 车辆车牌号码+颜色<p>
     * 车牌号码+间隔符+车牌颜色,间隔符：“_”,车牌颜色2位数字
     * 必填：是
     * 0-蓝色
     * 1-黄色
     * 2-黑色
     * 3-白色
     * 4-渐变绿色
     * 5-黄绿双拼色
     * 6-蓝白渐变色
     * 7-临时牌照
     * 11-绿色
     * 12-红色
     * 例：京A12345_1
     */
    @JSONField(ordinal = 14)
    public String vehicleId;

    @JSONField(ordinal = 15)
    public String plateHex;

    @JSONField(ordinal = 16)
    public Integer plateColor;

    /**
     * 入口车型
     */
    @JSONField(ordinal = 17)
    public Integer enVehicleType;

    /**
     * 车种
     * 0-普通
     * 8-军警
     * 10-紧急
     * 14-车队（35号公告已定义）
     * 21-绿通车
     * 22-联合收割机
     * 23-抢险救灾
     * 24-Jl类型集装箱
     * 25-大件运输
     * 26-应急车
     * 27-货车列车或半挂汽车列车
     * 28-J2类型集装箱
     */
    @JSONField(ordinal = 18)
    public Integer vehicleClass;

    /**
     * ETC储值卡当前卡面余额
     */
    @JSONField(ordinal = 19)
    public Integer feeSumLocal;

    /**
     * 车辆限定载质量/座位数/准牵引总质量
     * 由客车电子标签EFO1文件中车辆限定载重/座位数获得
     * 由货车电子标签EF01中车辆核定载质量／准牵引总质量获得，质量单位为kg
     * CPC卡填0
     */
    @JSONField(ordinal = 20)
    public Integer obuPermittedTowWeight;

    /**
     * 货车总重，单位：kg
     */
    @JSONField(ordinal = 21)
    public Integer totalWeight;

    /**
     * 车辆状态标识
     * 0-大件运输
     * 1-非优惠车
     * 2-绿通车
     * 3-联合收割机车
     * 4-集装箱车
     * 5–80 预留为通行管理平台使用，其中：
     * 5-疫苗车
     * 6-应急车
     * 81-254 预留
     * 255 为默认值
     */
    @JSONField(ordinal = 22)
    public Integer vehicleSign;

    /**
     * 预留字段
     */
    @JSONField(ordinal = 23)
    public Integer spare1;

    /**
     * 预留字段
     */
    @JSONField(ordinal = 24)
    public Integer spare2;

    /**
     * 预留字段
     */
    @JSONField(ordinal = 25)
    public Integer spare3;

    /**
     * 预留字段
     */
    @JSONField(ordinal = 26)
    public String spare4;

    /**
     * 预留字段
     */
    @JSONField(ordinal = 27)
    public String spare5;
}
